🔥 algorithm | January 09, 2021
코딩 인터뷰란 기술 직군 채용을 위한 기술 문제 중심의 개발 인터뷰를 말한다.
일반적으로 코딩 인터뷰란 오프라인 면접장에서 화이트보드를 이용해
후보자의 기술 지식, 코딩 능력, 문제 해결 역량, 창의성 등을 테스트 하는 것을 말한다.
주의할 점은 코딩 테스트 플랫폼마다 각기 다른 방식으로 동작한다는 점이다.
플랫폼에 대해 충분히 숙지하지 못한다면 엉뚱한 데서 시간을 허비할 수 있으니,
사전에 해당 플랫폼의 활용 방법을 충분히 숙지해야 한다.
연습장과 펜
특히 재귀 구조를 구현할 땐 머릿속으로만 구조를 그려내는 게 쉽지 않은 편인데 연습장에 적어두면서 값의 변화를 추적해보면 많은 도움이 된다.
코딩 테스트 시 자주 쓰이는 동작들에 대해서는 코드 스니펫(Snippet)을 미리 만들어 두면 도움이 된다.
복잡한 알고리즘 or 작업에 대한 코드를 빠르게 가져올 수 있도록 코드 스니펫을 사전에 만들어 두는 것이다.
로컬 컴퓨터에서 별도 프로그램을 사용할 수도 있고, 깃허브 기스트GitHub Gist
처럼 코드 스니펫을 관리할 수 있는 좋은 무료 온라인 서비스도 있다.
일부로라도 버그를 유발해 문제를 수정해 나아가는 형태로 개발을 진행하는 테스트 주도 개발 TDD(Test-Driven Development)과는 대척점인 사항으로 문제 제출 횟수를 평가 기준으로 삼는 경우도 있으니 확실할 때 제출하는 것이 좋다.
TDD : 실무에서처럼 일단 돌아가는 코드를 제출하고 테스트를 지속적으로 돌려보면서 오류를 수정해나가는 방식
테스트 케이스 중에는 일부러 입력 값에 수천, 수만 개를 입력해 두고 타임아웃을 유발하는 경우도 있다.
O(n)
또는 적어도 O(n log n)
정도는 되어야 풀리는 상황을 만들어내기 위해서다.
언어별로 타임아웃을 다르게 설정하는데, 동일한 알고리즘임에도 파이썬으로는 안풀리는 경우가 있다.
파이썬으로 풀이를 작성할 땐 알고리즘 최적화에 좀 더 많은 고민이 필요하다.
입력 값이 0
이거나 Null
이 들어오는 경우가 있는데,
별다른 고민을 하지 않았다면 분명 에러가 발생했을 것이다.
일반적으로는 여러 가지 예외 케이스에 대한 테스트를 만들어 일일이 검증해볼 수 있으나,
코딩 테스트는 처음부터 예외 처리를 잘하고 제출해야 번거로운 문제가 발생하지 않는다.
실수를 줄이려면 아예 처음부터 상단에 예외 처리부터 해놓고 진행하는 것도 좋은 방법이다.
문제를 풀다보면 알고리즘 방식을 잘못 접근하거나, 로직 구현 부분에서 문제가 발생한 경우가 많다.
한정된 시간이 정해져있으므로, 이 경우에는 어쩔 수 없다.
스스로 문제당 제한 시간을 정해두고 그 시간을 초과할 경우 과감하게 다음 문제로 넘어가자
문제를 풀다보면 풀 수 있을거 같은데 시간이 부족해서 문제를 못푸는 경우가 간혹 있다.
물론 이것은 실력이 아직 미숙하다는 것을 반증하는 것이다.
어쨋든 시간이 초과되고 플랫폼이 닫혔을 땐 다음 2가지에 해당하는 경우 계속 시도해보자.
풀이가 끝나면 결과를 면접관에게 메일로 보내자.
책을 쓴 저자도 이 방식을 통해서 “끝까지 답변을 제출한 것에 대해 면접관에게도 좋은 피드백을 받고, 인터뷰 기회까지 얻었다.”고 한다.
온라인 코딩 테스트에서 통합 개발 환경을 사용했다는 이야기를 하면 부정적인 의견을 가지는 면접관들도 있다.
IDE는 개발과 코딩을 더 효율적으로 할 수 있도록 도와주는 도구에 불과하지만, 굳이 안 쓸 이유도 없다.
IDE 사용에 대해서 납득이 될만한 내용으로 면접관을 설득할 수 있다면 좋겠지만, 무리한 어필은 안좋다고 본다.
중요한 점은, IDE가 없어도 개발이 가능하다는 점을 분명하게 강조해야 한다는 것이다.
“개발을 못해서 IDE를 택한게 아니라 개발의 편의를 위해 IDE를 택했을 뿐” 이라는 사실을 강조해야 한다.
REPL은 사용자가 입력한 프로그램을 읽고(Read) 값을 계산(Evaluate)한 다음 출력(Print)하는 일을 반복(Loop)하는 구조를 뜻하는 약어로서 사용자 입력에 대한 실행 결과를 바로 되돌려 주는 상호작용 환경을 말한다.
문제에 대한 해결을 하지 못할 것 같은 경우, 면접관에게 끊임없이 질문을 던져서 힌트를 받아내야 한다.
주로 4가지 요소로 평가하는데
많은 사람 앞에서 문제를 잘 풀이하고 잘 얘기할 수 있는 능력을 꾸준히 키워나가는게 중요하다.
[책만]파이썬 알고리즘 인터뷰 - 저자: 박상길